package com.lzh.shijicloudstack.utils;

import java.lang.reflect.Array;

/**
 * @author luzhiheng
 * @date 2025-04-09
 */
public class ArrayUtil {

    /**
     * 合并数组
     *
     * @param arrList 数组列表
     * @return T[]
     */
    public <T> T[] mergeArr(T[]... arrList) {
        // 计算总长度
        int totalLength = 0;
        for (T[] arr : arrList) {
            totalLength += arr.length;
        }

        // 确定组件类型
        Class<?> componentType = Object.class;
        boolean foundComponentType = false;
        for (T[] arr : arrList) {
            if (arr != null && arr.length > 0) {
                componentType = arr.getClass().getComponentType();
                foundComponentType = true;
                break;
            }
        }

        // 如果所有数组都为空，尝试从第一个数组获取类型（可能为空数组）
        if (!foundComponentType && arrList.length > 0 && arrList[0] != null) {
            componentType = arrList[0].getClass().getComponentType();
        }

        // 创建结果数组
        T[] result = (T[]) Array.newInstance(componentType, totalLength);

        int index = 0;
        for (T[] arr : arrList) {
            System.arraycopy(arr, 0, result, index, arr.length);
            index += arr.length;
        }

        return result;
    }

}
